from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
from urlparse import urlparse
import re

class MainPage(webapp.RequestHandler):

    def get(self):
        
        self.response.headers['Content-Type'] = 'text/html'
        
        # istenilen sayfayi appengine urlfetch ile fetch ediyruz
        baseurl = "http://www.youtube.com"
        requrl = urlparse(self.request.url)
        url = baseurl + requrl.path + "?" + requrl.query

        result = urlfetch.fetch(url, allow_truncated=True)

        # eger OK ise
        if result.status_code == 200:
            s = result.content
            # eger vidyo izleme sayfasindaysa
            if requrl.path == '/watch':
                # video_id ve t degerlerini bul
                # bu degerleri flv dosyasini bulmak icin kullanacagiz
                yt_video_id = re.search("\"video_id\": \"((.*))\", \"l\"", result.content).group(1)
                yt_t = re.search("\"t\": \"((.*))\", \"hl\"", result.content).group(1)
                # gorulen o ki swfArgs tanimlanmadan cakiyor, bunlarin yanina js dahilinde de video_id ve t tanimlamalari yapiyoruz
                s = re.sub("swfArgs(.*)", "swfArgs = {};\nvar ytVideoId = '"+yt_video_id+"';\nvar ytT = '"+yt_t+"';\n", s)

                # player berbat oldu bunu gelistirmek smoothing falan koymak gerek
                # jw flv player calissa iyi olurdu ama flash ile compile edilmis swf video oynatmadan once crossdomain.xml dosyasini istiyor, glype kurulumunda crossdomain.xml olmadigi icin de diger proxilerden flv dosyalarini alamiyoruz
                # player a cift tiklaninca fullscreen e gecme, controlbar, smoothing gibi featurelar eklenmeli
                s = re.sub("swfUrl(.*)", "swfUrl = 'http://itube.appspot.com/assets/player.swf';", s)
                # default js dosyasinda bazi degerleri degistirmek gerekiyor, bu sebeple yeni bir base.js olusturup assets/ folderi altina koydum. bu kisimda default js dosyasini bizimkiyle degistiriyoruz
                # bu dosya uzerinde de yapilmasi gereken buyuk is var, youtube cogu fonksiyonu ajax ile yapiyor ve bunlar icin hep youtube.com adresleri tanimlanmis durumda. bunlari falan toptan degistiren bir regex olsa bu fonksiyonlar da calisir
                s = re.sub("type=\"text/javascript\" src=\"(.*)\"></","type=\"text/javascript\" src=\"http://itube.appspot.com/assets/base.js\"></", s)

            self.response.out.write(s)
        else:
            print 'ofmg'

application = webapp.WSGIApplication([('/', MainPage), ('/.*', MainPage)], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
